package Test;
import ctrLag.*;
import modelLag.*;


import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Description of the class OrderTest.
 * 
 * @author (Christian, Umut, Christoffer, Patrick, Simon) 
 * @project (Semesterprojekt)
 * @version (2014.12.11)
 */
public class OrderTest
{
   private OrderCtr oCtr;
   private CustomerCon cCon;
   private Employee e;
   private Product p;
   
   /**
    * 
    */
   public OrderTest()
   {
       CreateInstances();
       TestFindCustomers(); //Tjekket boundaries fejl for findcustomer metoden
       TestCreateOrder(); //
   }
  
   /**
    * 
    */
   public void CreateInstances()
   {
       cCon.getInstance();
       oCtr = new OrderCtr();
       e = new Employee("Jørgen Jensen", "Nørrevang 3", "J@J.dk", "88888888", 1);
   }
   
   /**
    * Precondition
    * Kunde er oprettet
    * Medarbejder er oprettet
    * //produkt er ikke en del af den her precondition(slet kommentar)
    * Postcondition
    * Ordre er oprettet med mindst 1 delordre
    */
   public Order createOrderTest(Customer c, Employee e)
   {
        return oCtr.createOrder(c, e);
   }
   
    /**
    * Precondition
    * findCustomer() skal være true
    *   -(Employee skal være true)
    * Postcondition
    * Opretter ny ordre med customer og employee
    */
   public void TestCreateOrder(){
       Customer c = findCustomerTest("8"); //precondition
       
       //Order o = createOrderTest(c, e); //Virker ikke ved ikke lige hvorfor
       Order o = oCtr.createOrder(c, e); //Virker men ved ikke hvorfor
       
       p = oCtr.findProduct(2); //Test valid produkt id
       p = oCtr.findProduct(10); //Test invalid produkt id
       //Fejl
       //Index out of bounce
       //Rettet: Nej
       //Hvordan: && til || i arraylist (lav ordenligt)
       
       //p = oCtr.findProduct("abc"); //Test syntax fejl
       
       oCtr.addProduct(o, p, 1); //Test valid amount
       //oCtr.addProduct(o, p, 23); //Test invalid amount
       
       //oCtr.addProduct(o, p, ""); //Test syntax amount fejl
       
       /*
        * Test oCtr.endOdre()
        */
       //o.setStatus(1);
       // oCon.addOrder(o);
       // return o;
     
       
       // private double addProduct(Order o, Product p, int amt){
        //return oCtr.addProduct(o, p, amt);
        
        //System.out.println("Subtotal: " + addProduct(o, p, amt));
 
   }
   
   
   /**
    * Precondition
    * Et telefon af typen String
    * 
    * Postcondition
    * Finder ingenting eller en kunde
    */
   public Customer findCustomerTest(String phoneNumber)
   {
       return oCtr.findCustomer(phoneNumber);
   }
   
   public void TestFindCustomers(){
       findCustomerTest(""); //Tester ingen nummer?
       //Fejl:
       //Hvor: Modellag - CustomerCon.FindCustomer()
       //FindCustomer() fandt index out of Bounce
       //Rettet
       //Hvordan: rettet med -1 i ArrayList
       
       findCustomerTest("2"); //Tester forkert telefonnummer?
       //Fejl
       //findCustomer() - Nullpoint exception
       //Rettet
       //Hvordan: Fiksede med en trycatch
      
       findCustomerTest("8"); //Tester et rigtigt nummer?
        //Fejl
       //Ingen...(ingen system meddelser - er det en fejl?)
       //Rettet
       //Hvordan:...
       
       
       findCustomerTest("abc"); //Tester forkert input?
       //Fejl
       //Der sker ingen fejl (en fejl i sig selv) - men loopen burde være stoppet pga. forkert syntax
       //Rettet
       //Hvordan:... 

       
       //Bemærkninger
       //Hvor: Modellager - CustomerCon.FindCustomer()
       //findCustomer metoden er simplificeret
   }
}
